package movilmax.sia_corp.action;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

import utilidades.Cadena;

import movilmax.sia_corp.model.Listax;
import movilmax.sia_corp.model.Usuario;

import apli.conectar.Conectar;
import apli.entidades.Asistencia;
import apli.entidades.Quincena;
import apli.procesos.PWimax;
import basedatos.Resultado;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
 
public class CargarAsistencia extends ActionSupport {
	private static final long serialVersionUID = -1712260115427220828L;
    private LinkedList<Asistencia> det_asistencia;
    private LinkedList<Asistencia> res_asistencia;
    private String empleado; 
    private String cod_quincena;
    private String cod_dep;
    private List<Listax> quincenas;
    private List<Listax> deps;
    private List<Listax> empleados;
    private Conectar BASE;
    private String opc; 
    private String lim;
    
    private String titulo_rep;
    private String t_emp;
    private String t_tardanza;
    private String t_salida;
    private String t_demas;	
    private String t_adelanto;
    private String t_nolaborado;   
    private String t_extra;
    private String t_dif;
    private String t_permiso;
    private String t_horas;
    
    public String cargarDAsistencia(){
	   	 if(this.getCod_quincena() ==null || this.getCod_dep()==null || this.getEmpleado() ==null){
			 return SUCCESS;
		 }else{
			 if(this.getCod_quincena().equals("-1") ){
		    		this.addActionError("Debe seleccionar la quincena");
		    		return ERROR;
		    	}
		    	/*if(this.getCod_dep().equals("-1") ){
		    		this.addActionError("Debe seleccionar el departamento");
		    		return ERROR;
		    	}*/ 
		    	if(this.getEmpleado().equals("-1") ){
		    		this.addActionError("Debe seleccionar el empleado");
		    		return ERROR;
		    	} 
		 }
    	BASE = new Conectar(5);
		if(BASE.getMsg().equals("SI") ){
			PWimax PW=new PWimax(BASE.getBaseDatos());	
			Quincena QA_X=PW.cargarQuincena( this.getCod_quincena()  );
			det_asistencia =PW.detalleAsistencia(QA_X,this.getEmpleado());
			BASE.getBaseDatos().cerrarConexion();
	    	return SUCCESS;
		}else{
			this.addActionError("No hay conexion al servidor (BD)" );
			return ERROR;
		}
     }
     public String cargarRAsistencia(){
    	 res_asistencia=new LinkedList<Asistencia>();
    	 if(this.getCod_quincena() ==null || this.getCod_dep()==null ){
    		 return SUCCESS;
    	 }else{
    		 if(this.getCod_quincena().equals("-1") ){
 	    		this.addActionError("Debe seleccionar la quincena");
 	    		return ERROR;
 	    	}
 	    	if(this.getCod_dep().equals("-1") ){
 	    		this.addActionError("Debe seleccionar el departamento");
 	    		return ERROR;
 	    	} 
    	 }
    	BASE = new Conectar(5);
		if( BASE.getMsg().equals("SI")){
			PWimax PW=new PWimax(BASE.getBaseDatos());	
			Quincena QA_X=PW.cargarQuincena(this.getCod_quincena());
			if(this.getEmpleado().equals("-1") ){
				String SQL="select USERID as cod from USERINFO where activo='1' and not DEFAULTDEPTID is null and DEFAULTDEPTID ='"+this.getCod_dep()+"'  order by Name";
				Resultado RCS=BASE.getBaseDatos().consultar(SQL);
				if(RCS.RP ){
					Cadena C=new Cadena();	
					int t_empi=0,t_tardanzai=0,t_salidai=0,t_demasi=0,t_adelantoi=0,t_nolaboradoi=0,t_extrai=0,t_difi=0,t_permisoi=0,t_horasi=0;
					do{
						Asistencia lt=PW.resumenAsistencia(QA_X,RCS.getCadena("cod") );
						res_asistencia.add(lt);
						t_empi++;
						t_tardanzai+=C.convertirInt(lt.getTardanza());
						t_salidai+=C.convertirInt(lt.getSalida());
						t_demasi+=C.convertirInt(lt.getDe_mas());
						t_adelantoi+=C.convertirInt(lt.getAdelanto());
						t_nolaboradoi+=C.convertirInt(lt.getTt_tardanza());
						t_extrai+=C.convertirInt(lt.getTt_extra());
						t_difi+=C.convertirInt(lt.getDiferencia());
						t_permisoi+=C.convertirInt(lt.getPermiso());
						t_horasi+=C.convertirInt(lt.getHoras());
				  }while(RCS.sigItem());	
				  this.setT_emp(C.truncarN(C.convertirStr(t_empi)));	
				  this.setT_tardanza(C.truncarN(C.convertirStr(t_tardanzai)));
				  this.setT_salida(C.truncarN(C.convertirStr(t_salidai)));
				  this.setT_demas(C.truncarN(C.convertirStr(t_demasi)));
				  this.setT_adelanto(C.truncarN(C.convertirStr(t_adelantoi)));
				  this.setT_nolaborado(C.truncarN(C.convertirStr(t_nolaboradoi)));
				  this.setT_extra(C.truncarN(C.convertirStr(t_extrai)));
				  this.setT_dif( C.truncarN(C.convertirStr(t_difi)));
				  this.setT_permiso(C.truncarN(C.convertirStr(t_permisoi)));
				  this.setT_horas(C.truncarN(C.convertirStr(t_horasi)));
				}
	    	}else{
	    		Asistencia lt=PW.resumenAsistencia(QA_X,this.getEmpleado() );
				res_asistencia.add(lt);
	    	}
			BASE.getBaseDatos().cerrarConexion();
	    	return SUCCESS;
		}else{
			this.addActionError("No hay conexion al servidor (BD)" );
			return ERROR;
		}
    }
 	public String cargarQuincenas(){
 		quincenas= new ArrayList<Listax>();
		String SQL="Select cod,descripcion from Z_QUINCENAS where activo='1' and inicio<=getdate() Order By cod DESC";
		Resultado RCS=BASE.getBaseDatos().consultar(SQL);
		if(RCS.RP){
		   do{ 
			   Listax LST=new Listax();
			   LST.setCod(RCS.getCadena("cod"));
			   LST.setDescripcion(RCS.getCadena("descripcion"));
			   quincenas.add(LST);
		   }while(RCS.sigItem()); 
		}
		return SUCCESS;
	} 
 	public String cargarDepartamentos(){
 		deps= new ArrayList<Listax>();
		String SQL="Select DEPTID as cod,DEPTNAME as descripcion from DEPARTMENTS where mostrar ='1' Order By DEPTNAME ASC";
		Resultado RCS=BASE.getBaseDatos().consultar(SQL);
		if(RCS.RP){
		   do{ 
			   Listax LST=new Listax();
			   LST.setCod(RCS.getCadena("cod"));
			   LST.setDescripcion(RCS.getCadena("descripcion"));
			   deps.add(LST);
		   }while(RCS.sigItem()); 
		}
		return SUCCESS;
	} 
 	public String cargarEmpleados(){
 		empleados= new ArrayList<Listax>();
 		if(this.getCod_dep()==null){
 			return ERROR;
 		}
		String SQL="select USERID as cod,Name as descripcion from USERINFO where activo='1' and not DEFAULTDEPTID is null and DEFAULTDEPTID ='"+this.getCod_dep()+"'  order by Name";
		Resultado RCS=BASE.getBaseDatos().consultar(SQL);
		if(RCS.RP){
		   do{ 
			   Listax LST=new Listax();
			   LST.setCod(RCS.getCadena("cod"));
			   LST.setDescripcion(RCS.getCadena("descripcion"));
			   empleados.add(LST);
		   }while(RCS.sigItem()); 
		}
		return SUCCESS;
	} 
    @SuppressWarnings("rawtypes")
	public String getJSON(){
		  Map session = ActionContext.getContext().getSession();
		  Usuario USUARIO = (Usuario)session.get("ses_usuario");
		  if (USUARIO==null){
			  this.addActionError("La sesion del usuario ha caducado");
			  return ERROR;
		  }
		  BASE= new Conectar(5);
		  if(BASE.getMsg().equals("SI")){
			  if(this.getOpc()==null && this.getCod_dep()!=null){
				  cargarEmpleados();  
			  }else{
				  if(this.getOpc().equals("1") ){
					 cargarQuincenas();
				  }else if(this.getOpc().equals("2")){
				     cargarDepartamentos();
				  }else{  
				  } 
			   }
			  BASE.getBaseDatos().cerrarConexion(); 
			  return SUCCESS;
		  }else{
			  this.addActionError("No hay conexion al servidor (BD)");
		      return ERROR;
		  }
    } 
    
    
	public List<Listax> getEmpleados() {
		return empleados;
	}
	public void setEmpleados(List<Listax> empleados) {
		this.empleados = empleados;
	}
	public String getCod_dep() {
		return cod_dep;
	}
	public void setCod_dep(String cod_dep) {
		this.cod_dep = cod_dep;
	}
	public List<Listax> getDeps() {
		return deps;
	}
	public void setDeps(List<Listax> deps) {
		this.deps = deps;
	}
	public List<Listax> getQuincenas() {
		return quincenas;
	}
	public void setQuincenas(List<Listax> quincenas) {
		this.quincenas = quincenas;
	}
	public String getOpc() {
		return opc;
	}
	public void setOpc(String opc) {
		this.opc = opc;
	}
	public String getCod_quincena() {
		return cod_quincena;
	}
	public void setCod_quincena(String cod_quincena) {
		this.cod_quincena = cod_quincena;
	}
	public String getEmpleado() {
		return empleado;
	}
	public void setEmpleado(String empleado) {
		this.empleado = empleado;
	}
	public LinkedList<Asistencia> getDet_asistencia() {
		return det_asistencia;
	}
	public void setDet_asistencia(LinkedList<Asistencia> det_asistencia) {
		this.det_asistencia = det_asistencia;
	}
	public LinkedList<Asistencia> getRes_asistencia(){
		return res_asistencia;
	}
	public void setRes_asistencia(LinkedList<Asistencia> res_asistencia) {
		this.res_asistencia = res_asistencia;
	}
	public String getTitulo_rep() {
		return titulo_rep;
	}
	public void setTitulo_rep(String titulo_rep) {
		this.titulo_rep = titulo_rep;
	}
	public String getT_emp() {
		return t_emp;
	}
	public void setT_emp(String t_emp) {
		this.t_emp = t_emp;
	}
	public String getT_tardanza() {
		return t_tardanza;
	}
	public void setT_tardanza(String t_tardanza) {
		this.t_tardanza = t_tardanza;
	}
	public String getT_salida() {
		return t_salida;
	}
	public void setT_salida(String t_salida) {
		this.t_salida = t_salida;
	}
	public String getT_demas() {
		return t_demas;
	}
	public void setT_demas(String t_demas) {
		this.t_demas = t_demas;
	}
	public String getT_adelanto() {
		return t_adelanto;
	}
	public void setT_adelanto(String t_adelanto) {
		this.t_adelanto = t_adelanto;
	}
	public String getT_nolaborado() {
		return t_nolaborado;
	}
	public void setT_nolaborado(String t_nolaborado) {
		this.t_nolaborado = t_nolaborado;
	}
	public String getT_extra() {
		return t_extra;
	}
	public void setT_extra(String t_extra) {
		this.t_extra = t_extra;
	}
	public String getT_dif() {
		return t_dif;
	}
	public void setT_dif(String t_dif) {
		this.t_dif = t_dif;
	}
	public String getT_permiso() {
		return t_permiso;
	}
	public void setT_permiso(String t_permiso) {
		this.t_permiso = t_permiso;
	}
	public String getT_horas() {
		return t_horas;
	}
	public void setT_horas(String t_horas) {
		this.t_horas = t_horas;
	}
	public String getLim() {
		return lim;
	}
	public void setLim(String lim) {
		this.lim = lim;
	}
	
	
}
